const express = require('express');
const path = require('path')
const bodyParser = require('body-parser');
//const MongoClient = require('mongodb').MongoClient;
const session = require('express-session');
const md5 = require('md5-node');

const DB = require('./modules/db.js')

const multiparty = require('multiparty') //图片上传模块  既可以获取form表单数据，也可以实现上传图片

const fs = require('fs');

//const DBurl = 'mongodb://127.0.0.1:27017/';

const app = new express()
//使用ejs模板引擎
app.set('view engine', 'ejs')

//配置public目录为静态资源目录
app.use(express.static(path.join(__dirname, "publics")))
app.use('/upload', express.static(path.join(__dirname, "upload")))

app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(bodyParser.json());

app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: {
        maxAge: 1000 * 5 * 60
    },
    rolling: true,
    /* store: new MongoStore({
        url: 'mongodb://127.0.0.1:27017/productmanage',
        touchAfter: 24 * 3600
    }) */
}))

//自定义中间件，判断登录状态
app.use(function (req, res, next) {
    //console.log(md5('123456'))
    if (req.url == '/login' || req.url == '/dologin') {
        next()
    } else {
        if (req.session.useinfo && req.session.useinfo.usename != '') {
            next()
        } else {
            res.redirect('/login')
        }
    }
})


app.get('/', function (req, res) {
    res.send('hello')
})

//登录
app.get('/login', function (req, res) {
    res.render('login')
})

app.post('/dologin', function (req, res) {
    console.log(req.body)
    DB.find('user', {
        'username': req.body.username,
        'password': md5(req.body.password)
    }, function (error, data) {
        if (error) {
            console.log(error)
        } else {
            if (data.length > 0) {
                console.log('登陆成功')
                //保存用户信息
                req.session.useinfo = data[0];

                //ejs中设置全局数据，所有页面都可以使用
                app.locals['userinfo'] = req.session.useinfo;

                res.redirect('/product');
            } else {
                console.log('登录失败')
                res.send("<script>alert('登录失败');location.href='/login';</script>")
            }
        }
    })

    //连接数据库
    // MongoClient.connect(DBurl, {
    //     useNewUrlParser: true
    // }, (err, client) => {
    //     if (err) {
    //         console.log(err)
    //         console.log('数据连接失败');
    //         return false;
    //     }
    //     let db = client.db("productmanage"); /*获取db对象*/

    //     var result = db.collection('user').find({
    //         'username': req.body.username,
    //         'password': md5(req.body.password)
    //     })
    //     result.toArray(function (error, data) {
    //         if (error) {
    //             console.log(error)
    //         } else {
    //             console.log(data)
    //             if (data.length > 0) {
    //                 console.log('登陆成功')
    //                 //保存用户信息
    //                 req.session.useinfo = data[0];

    //                 //ejs中设置全局数据，所有页面都可以使用
    //                 app.locals['userinfo'] = req.session.useinfo;

    //                 res.redirect('/product');
    //             } else {
    //                 console.log('登录失败')
    //                 res.send("<script>alert('登录失败');location.href='/login';</script>")
    //             }
    //         }
    //     })

    //     client.close();
    //})
})

//列表
app.get('/product', function (req, res) {
    DB.find('product', {}, function (error, data) {
        if (error) {
            console.log(error)
        } else {
            res.render('product', {
                list: data
            })
        }
    })
    //连接数据库
    // MongoClient.connect(DBurl, {
    //     useNewUrlParser: true
    // }, (err, client) => {
    //     if (err) {
    //         console.log(err)
    //         console.log('数据连接失败');
    //         return false;
    //     }
    //     let db = client.db("productmanage"); /*获取db对象*/

    //     var result = db.collection('product').find();

    //     result.toArray(function (error, data) {
    //         if (error) {
    //             console.log(error)
    //         } else {
    //             console.log(data)

    //             res.render('product',{
    //                 list: data
    //             })
    //         }
    //     })

    //     client.close();
    // })
})

//增加商品
app.get('/productadd', function (req, res) {
    res.render('productadd')
})

//编辑商品
app.get('/productedit', function (req, res) {
    let id = req.query.id;
    //去数据库查询这个id对应的数据      自增长的id要用  '_id': new DB.ObjectID(id)
    DB.find('product', {
        '_id': new DB.ObjectID(id)
    }, function (error, data) {
        if (error) {
            console.log(error)
        } else {
            console.log(data)
            res.render('productedit', {
                list: data[0]
            })
        }
    })

})

//删除商品
app.get('/productdelete', function (req, res) {
    let id = req.query.id;
    DB.deleteOne('product', {
        '_id': new DB.ObjectID(id)
    }, function (error, data) {
        if (error) {
            console.log(error)
        } else {
            //console.log(data)
            res.redirect('product')
        }
    })
})
//退出登录
app.get('/loginout', function (req, res) {
    req.session.destroy(function (err) {
        if (err) {
            console.log(err)
        } else {
            res.redirect('/login')
        }
    })
})
//删除商品
app.get('/delete', function (req, res) {
    DB.deleteOne('product', {
        'title': '魅族'
    }, function (error, data) {
        if (error) {
            console.log(error)
        } else {
            res.send('success')
        }
    })
})
//添加商品
app.post('/doProductAdd', function (req, res) {
    //获取表单的数据以及post过来的图片
    let form = new multiparty.Form();
    form.uploadDir = 'upload'; //上传图片保存的地址        目录必须存在
    form.parse(req, function (err, fields, files) {
        console.log(fields) //获取表单的数据
        console.log(files) //图片上传成功返回的信息

        let title = fields.title[0];
        let price = fields.price[0];
        let fee = fields.fee[0];
        let description = fields.description[0];
        let pic = files.pic[0].path;

        DB.insert('product', {
            title,
            price,
            fee,
            description,
            pic
        }, function (error, data) {
            if (error) {
                console.log(error)
            } else {
                res.redirect('/product')
            }
        })

    })

})

//编辑商品
app.post('/doProductEdit', function (req, res) {
    //获取表单的数据以及post过来的图片
    let form = new multiparty.Form();
    form.uploadDir = 'upload'; //上传图片保存的地址        目录必须存在
    form.parse(req, function (err, fields, files) {
        console.log(fields) //获取表单的数据
        console.log(files) //图片上传成功返回的信息

        let _id = fields._id[0];
        let title = fields.title[0];
        let price = fields.price[0];
        let fee = fields.fee[0];
        let description = fields.description[0];
        let originalFilename = files.pic[0].originalFilename;
        let pic = files.pic[0].path;

        if (originalFilename) { //修改图片
            var setData = {
                title,
                price,
                fee,
                description,
                pic
            }
        } else { //没有修改图片
            var setData = {
                title,
                price,
                fee,
                description
            }
            //删除临时图片
            fs.unlink(path.join(__dirname, '/' + pic), function () {

            })
        }

        DB.update('product', {
            "_id": new DB.ObjectID(_id)
        }, setData, function (error, data) {
            if (error) {
                console.log(error)
            } else {
                res.redirect('/product')
            }
        })
    })

})
app.listen(3000, '127.0.0.1')